/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.janalise.control;

import br.com.janalise.model.MapaDoTexto;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.neodatis.odb.OID;
import org.neodatis.odb.Objects;
import org.neodatis.odb.core.query.IQuery;
import org.neodatis.odb.core.query.criteria.Where;
import org.neodatis.odb.impl.core.query.criteria.CriteriaQuery;

/**
 *
 * @author boskyn9
 */
public class MapaDoTextoController extends Controller {

    public OID save(MapaDoTexto mapa) {
        openConexao();
        boolean exist = odb.getClassRepresentation(MapaDoTexto.class).existIndex(mapa.getNome());
        OID oid = null;
        if (!exist) {
            try {
                String[] campo = {"nome"};
                odb.getClassRepresentation(MapaDoTexto.class).addUniqueIndexOn(mapa.getNome(), campo, true);

                oid = setAndReturnOID(mapa, MapaDoTexto.class);
                odb.store(mapa);
            } catch (Exception ex) {
                Logger.getLogger(MapaDoTextoController.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            oid = odb.store(mapa);
        }
        closeConexao();
        return oid;
    }

    public Objects<MapaDoTexto> findAll() {
        openConexao();
        Objects objects = odb.getObjects(MapaDoTexto.class);
        if (objects != null && objects.size() > 0) {
            return (Objects<MapaDoTexto>) objects;
        }
        closeConexao();
        return null;
    }

    public MapaDoTexto findByNome(String nome) {
        openConexao();
        IQuery query = new CriteriaQuery(MapaDoTexto.class, Where.equal("nome", nome));
        Objects objects = odb.getObjects(query);
        if (objects != null && objects.size() > 0) {
            return (MapaDoTexto) objects.getFirst();
        }
        closeConexao();
        return null;
    }

    public List<MapaDoTexto> Buscar(String texto) {
        openConexao();
        List<MapaDoTexto> retorno = new ArrayList<MapaDoTexto>();

        for (StringTokenizer stringTokenizer = new StringTokenizer(texto); stringTokenizer.hasMoreTokens();) {
            String token = stringTokenizer.nextToken();

            // consulta pelo nome do arquivo
            IQuery query = new CriteriaQuery(MapaDoTexto.class, Where.ilike("nome", token));
            Objects objects = odb.getObjects(query);
            if (objects != null && objects.size() > 0) {
                List<MapaDoTexto> respostas = (List<MapaDoTexto>)objects;
                for (MapaDoTexto mapaDoTexto : respostas) {
                    if(!retorno.contains(mapaDoTexto))
                        retorno.add(mapaDoTexto);
                }
            }

            // consulta pelo texto
            query = new CriteriaQuery(MapaDoTexto.class, Where.ilike("conteudo", token));
            objects = odb.getObjects(query);
            if (objects != null && objects.size() > 0) {
                List<MapaDoTexto> respostas = (List<MapaDoTexto>)objects;
                for (MapaDoTexto mapaDoTexto : respostas) {
                    if(!retorno.contains(mapaDoTexto))
                        retorno.add(mapaDoTexto);
                }
            }

            // consulta autor
            query = new CriteriaQuery(MapaDoTexto.class, Where.ilike("autor", token));
            objects = odb.getObjects(query);
            if (objects != null && objects.size() > 0) {
                List<MapaDoTexto> respostas = (List<MapaDoTexto>)objects;
                for (MapaDoTexto mapaDoTexto : respostas) {
                    if(!retorno.contains(mapaDoTexto))
                        retorno.add(mapaDoTexto);
                }
            }

            // consulta conceito
            query = new CriteriaQuery(MapaDoTexto.class, Where.ilike("conceito", token));
            objects = odb.getObjects(query);
            if (objects != null && objects.size() > 0) {
                List<MapaDoTexto> respostas = (List<MapaDoTexto>)objects;
                for (MapaDoTexto mapaDoTexto : respostas) {
                    if(!retorno.contains(mapaDoTexto))
                        retorno.add(mapaDoTexto);
                }
            }

        }
        closeConexao();
        return retorno;
    }

    public MapaDoTexto findByOid(OID oid) {
        openConexao();
        IQuery query = new CriteriaQuery(MapaDoTexto.class, Where.equal("oid", oid));
        Objects objects = odb.getObjects(query);
        if (objects != null && objects.size() > 0) {
            return (MapaDoTexto) objects.getFirst();
        }
        closeConexao();
        return null;
    }

    public OID delete(MapaDoTexto mapa) {
        openConexao();
        OID oid = odb.delete(mapa);
        closeConexao();
        return oid;
    }

    public OID deleteCascade(MapaDoTexto mapa) {
        openConexao();
        OID oid = odb.deleteCascade(mapa);
        closeConexao();
        return oid;
    }

    public void delete(OID oid) {
        openConexao();
        odb.deleteObjectWithId(oid);
        closeConexao();
    }
}
